

import { scene } from './utils/init'
import * as THREE from "three"
// 目标：立方体类 MyCube 的创建与应用
// 1. 定义 MyCube 类以及属性和方法
// 2. 循环创建 5 个立方体并出现在三维空间中

// 1. 定义 MyCube 类以及属性和方法

class  MyCube {
  constructor(scene) {
    this.color =  new THREE.Color(`rgb(${Math.floor(Math.random() * 256)}, ${Math.floor(Math.random() * 256)}, ${Math.floor(Math.random() * 256)})`)
    this.postion = [Math.floor(Math.random() * (5 - 0 + 1) + 0), Math.floor(Math.random() * (5 - 0 + 1) + 0), Math.floor(Math.random() * (5 - 0 + 1) + 0)]
    this.size = [Math.floor(Math.random() * (3 - 1 + 1) + 1), Math.floor(Math.random() * (3 - 1 + 1) + 1), Math.floor(Math.random() * (3 - 1 + 1) + 1)]
    this.scene = scene
   this.init() // 在new d 时候直接创建立方体

  }
  init() {
    // 当前 init 方法以后是实例对象来调用，this 指向当前函数的调用者
    // 创建几何图形
    const geometry = new THREE.BoxGeometry(...this.size)
    // 创建材质
    const material = new THREE.MeshBasicMaterial({color: this.color})
    // 创建物体
    const mesh = new THREE.Mesh(geometry,material)
    mesh.position.set(...this.postion) // 物体位置随机
    // 物体加入到场景中
    this.scene.add(mesh)
    this.model = mesh // 为了以后在别的方法里可以访问到这个 Mesh 物体（颜色值修改/旋转操作）
  }
  rendColor() {
    // new THREE.Color(`rgb(${Math.floor(Math.random() * 256)}, ${Math.floor(Math.random() * 256)}, ${Math.floor(Math.random() * 256)})`)
    this.model.material.color =  new THREE.Color(`rgb(${Math.floor(Math.random() * 256)}, ${Math.floor(Math.random() * 256)}, ${Math.floor(Math.random() * 256)})`)
  }
  rotate() {
    this.model.rotation.set(0,Math.PI / 4)
  }
}



// 循环创建5个立方体 并出现在三维空间中

const arr = []
for( let i = 0; i< 5;i++ ) {
  arr.push(new MyCube(scene))
}


console.log(arr)

// 测试： 双击修改颜色
window.addEventListener('dblclick',() => {
  arr.forEach(cube => {
    cube.rendColor() // 调用rendColor函数修改颜色
  })
})

// // 测试：双击修改颜色
// window.addEventListener('dblclick', () => {
//   arr.forEach(cube => {
//     cube.rendColor() // 调用自己类中的方法
//   })
// })
// const cube = new MyCube(scene)

// cube.init()